﻿using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Request
{
    /// <summary>
    /// Contrato de dados de solicitacao para filtro de verificação de politicas de
    /// corretagem
    /// </summary>
    [DataContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Request", Name = "FiltroVerificacaoPoliticaRequest")]
    public class FiltroVerificacaoPoliticaRequest
    {
        #region Atributos

        /// <summary>
        /// Código da política de corretagem
        /// </summary>
        private int? _codigoPolitica;

        /// <summary>
        /// Data Inicial da vigência da política de corretagem
        /// </summary>
        private DateTime? _dataInicial;

        /// <summary>
        /// Código do operador
        /// </summary>
        private int? _codigoOperador;

        /// <summary>
        /// Código do assessor
        /// </summary>
        private int? _codigoAssessor;

        /// <summary>
        /// Código do agente
        /// </summary>
        private int? _codigoAgente;

        /// <summary>
        /// Mercado
        /// </summary>
        private DataContract.Enum.TipoMercado? _mercado;

        /// <summary>
        /// Carteira
        /// </summary>
        private int? _carteira;

        /// <summary>
        /// Ativo (ISIN)
        /// </summary>
        private string _ativo;

        /// <summary>
        /// Código da tabela padrão de corretagem
        /// </summary>
        private int? _codigoTabelaPadrao;

        /// <summary>
        /// Código da tabela de corretagem de benefício
        /// </summary>
        private int? _codigoTabelaBeneficio;

        /// <summary>
        /// Natureza da operação
        /// </summary>
        private Enum.NaturezaOperacao? _naturezaOperacao;

        /// <summary>
        /// Tipo de operação de verificação
        /// </summary>
        private DataContract.Request.TipoOperacaoVerificacaoRequest _tipoOperacao;

        #endregion

        #region Propriedades

        /// <summary>
        /// Código da política de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public int? CodigoPolitica
        {
            get
            {
                return _codigoPolitica;
            }
            set
            {
                _codigoPolitica = value;
            }
        }

        /// <summary>
        /// Data Inicial da vigência da política de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public DateTime? DataInicial
        {
            get
            {
                return _dataInicial;
            }
            set
            {
                _dataInicial = value;
            }
        }

        /// <summary>
        /// Código do operador
        /// </summary>
        [DataMember(IsRequired = false)]
        public int? CodigoOperador
        {
            get
            {
                return _codigoOperador;
            }
            set
            {
                _codigoOperador = value;
            }
        }

        /// <summary>
        /// Código do assessor
        /// </summary>
        [DataMember(IsRequired = false)]
        public int? CodigoAssessor
        {
            get
            {
                return _codigoAssessor;
            }
            set
            {
                _codigoAssessor = value;
            }
        }

        /// <summary>
        /// Código do agente
        /// </summary>
        [DataMember(IsRequired = false)]
        public int? CodigoAgente
        {
            get
            {
                return _codigoAgente;
            }
            set
            {
                _codigoAgente = value;
            }
        }

        /// <summary>
        /// Mercado
        /// </summary>
        [DataMember(IsRequired = false)]
        public DataContract.Enum.TipoMercado? Mercado
        {
            get
            {
                return _mercado;
            }
            set
            {
                _mercado = value;
            }
        }

        /// <summary>
        /// Carteira
        /// </summary>
        [DataMember(IsRequired = false)]
        public int? Carteira
        {
            get
            {
                return _carteira;
            }
            set
            {
                _carteira = value;
            }
        }

        /// <summary>
        /// Ativo (ISIN)
        /// </summary>
        [DataMember(IsRequired = false)]
        public string Ativo
        {
            get
            {
                return _ativo;
            }
            set
            {
                _ativo = value;
            }
        }

        /// <summary>
        /// Código da tabela padrão de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public int? CodigoTabelaPadrao
        {
            get
            {
                return _codigoTabelaPadrao;
            }
            set
            {
                _codigoTabelaPadrao = value;
            }
        }

        /// <summary>
        /// Código da tabela de corretagem de benefício
        /// </summary>
        [DataMember(IsRequired = false)]
        public int? CodigoTabelaBeneficio
        {
            get
            {
                return _codigoTabelaBeneficio;
            }
            set
            {
                _codigoTabelaBeneficio = value;
            }
        }

        /// <summary>
        /// Natureza da operação
        /// </summary>
        [DataMember(IsRequired = false)]
        public Enum.NaturezaOperacao? NaturezaOperacao
        {
            get
            {
                return _naturezaOperacao;
            }
            set
            {
                _naturezaOperacao = value;
            }
        }

        /// <summary>
        /// Tipo de operação de verificação
        /// </summary>
        [DataMember(IsRequired = false)]
        public DataContract.Request.TipoOperacaoVerificacaoRequest TipoOperacao
        {
            get
            {
                return _tipoOperacao;
            }
            set
            {
                _tipoOperacao = value;
            }
        }

        #endregion

        #region Construtores

        /// <summary>
        /// Construtor FiltroVerificacaoPoliticaRequest
        /// </summary>
        public FiltroVerificacaoPoliticaRequest() { }

        /// <summary>
        /// Construtor FiltroVerificacaoPoliticaRequest
        /// </summary>
        /// <param name="codigoPolitica"></param>
        /// <param name="dataInicial"></param>
        /// <param name="codigoOperador"></param>
        /// <param name="codigoAssessor"></param>
        /// <param name="codigoAgente"></param>
        /// <param name="mercado"></param>
        /// <param name="carteira"></param>
        /// <param name="ativo"></param>
        /// <param name="codigoTabelaPadrao"></param>
        /// <param name="codigoTabelaBeneficio"></param>
        /// <param name="naturezaOperacao"></param>
        /// <param name="tipoOperacao"></param>
        public FiltroVerificacaoPoliticaRequest(int? codigoPolitica, DateTime? dataInicial, int? codigoOperador, int? codigoAssessor, int? codigoAgente, DataContract.Enum.TipoMercado? mercado, int? carteira, string ativo, int? codigoTabelaPadrao, int? codigoTabelaBeneficio, Enum.NaturezaOperacao? naturezaOperacao, DataContract.Request.TipoOperacaoVerificacaoRequest tipoOperacao)
        {
            this._codigoPolitica = codigoPolitica;
            this._dataInicial = dataInicial;
            this._codigoOperador = codigoOperador;
            this._codigoAssessor = codigoAssessor;
            this._codigoAgente = codigoAgente;
            this._mercado = mercado;
            this._carteira = carteira;
            this._ativo = ativo;
            this._codigoTabelaPadrao = codigoTabelaPadrao;
            this._codigoTabelaBeneficio = codigoTabelaBeneficio;
            this._naturezaOperacao = naturezaOperacao;
            this._tipoOperacao = tipoOperacao;
        }
        #endregion
    }
}